home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 November / Chip Kasım 2000.iso / prog / share / 02 / setup.exe / data.z / LOOPBA~1.CLA (.txt) < prev    next >
Encoding:
Java Class File  |  1996-10-23  |  13.5 KB  |  916 lines

  1. import java.applet.AudioClip;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Event;
  6. import java.awt.Font;
  7. import java.awt.Frame;
  8. import java.awt.Graphics;
  9. import java.awt.Image;
  10. import java.awt.MediaTracker;
  11. import java.awt.Point;
  12. import java.awt.Rectangle;
  13. import java.awt.image.ImageObserver;
  14. import java.io.DataInputStream;
  15. import java.io.FilterInputStream;
  16. import java.io.IOException;
  17. import java.net.MalformedURLException;
  18. import java.net.URL;
  19.  
  20. class LoopBase extends Thread {
  21.    private static final int m_kMajorPlayerVersion = 1;
  22.    private static final int m_kMinorPlayerVersion = 2;
  23.    private static final int m_kFileSectionTerm = -1;
  24.    public static final int TRIG_NONE = 0;
  25.    public static final int TRIG_AUTOMATIC = 1;
  26.    public static final int TRIG_LEFT_SINGLE = 2;
  27.    public static final int TRIG_LEFT_DOUBLE = 4;
  28.    public static final int TRIG_RIGHT_SINGLE = 8;
  29.    public static final int TRIG_RIGHT_DOUBLE = 16;
  30.    public static final int TRIG_ANY_CLICK = 30;
  31.    public static final int EXIT_AUTOMATIC = 0;
  32.    public static final int EXIT_LEFT_SINGLE = 1;
  33.    public static final int EXIT_LEFT_DOUBLE = 2;
  34.    public static final int EXIT_RIGHT_SINGLE = 4;
  35.    public static final int EXIT_RIGHT_DOUBLE = 8;
  36.    public static final int EXIT_ANY_CLICK = 5;
  37.    public static final int STATUS_EMPTY = 0;
  38.    public static final int STATUS_LOADING = 1;
  39.    public static final int STATUS_LOADED = 2;
  40.    public static final int STATUS_PLAYING = 3;
  41.    public static final int STATUS_SUSPENDED = 4;
  42.    public static final int STATUS_EXIT = 5;
  43.    private WebMotion m_theApp;
  44.    private Image m_imageBuffer;
  45.    private Graphics m_graphBuffer;
  46.    private Graphics m_graphApp;
  47.    private boolean m_bThreadSuspended = false;
  48.    private Frame m_frameTop;
  49.    private int m_iMajorFileVersion;
  50.    private int m_iMinorFileVersion;
  51.    private int m_iCurrentFrame;
  52.    private int m_iStartFrame;
  53.    private int m_iEndFrame;
  54.    private int m_iFinalFrame;
  55.    private int m_iFrameCount;
  56.    private int m_iPause;
  57.    private int m_iPauseExit;
  58.    private boolean m_bInteruptPauseEvent = false;
  59.    private int m_iFramesPerSecond = 12;
  60.    private boolean m_bDoLoop = true;
  61.    private int m_iStatus;
  62.    private long m_iWhenLastClick;
  63.    private boolean m_bCurrentActorsLoaded = false;
  64.    private FrameElement[][] m_frames;
  65.    private Image[][] m_actors;
  66.    private Point[][] m_regPoints;
  67.    private String[] m_arstrHyperLinks;
  68.    private AudioClip[] m_arAudioClips;
  69.    private Image m_imageBackground;
  70.    private MediaTracker m_tracker;
  71.    private String m_strDefaultHyperLink;
  72.    private String m_strDefaultTarget;
  73.  
  74.    LoopBase(WebMotion var1) {
  75.       if (var1 != null) {
  76.          this.m_theApp = var1;
  77.          this.m_imageBuffer = this.m_theApp.createImage(this.m_theApp.size().width, this.m_theApp.size().height);
  78.          this.m_graphBuffer = this.m_imageBuffer.getGraphics();
  79.          this.initAnim();
  80.       }
  81.  
  82.    }
  83.  
  84.    public void run() {
  85.       int var1 = 0;
  86.       int var2 = 0;
  87.       long var3 = 0L;
  88.       long var5 = 0L;
  89.       int var7 = 0;
  90.       boolean var8 = false;
  91.       double var9 = (double)0.0F;
  92.       int var11 = 1;
  93.       this.m_graphApp = this.m_theApp.getGraphics();
  94.  
  95.       while(true) {
  96.          var1 = this.m_iFramesPerSecond;
  97.          var2 = var1 != 0 ? 1000 / var1 : 0;
  98.          var5 = System.currentTimeMillis();
  99.          if (var5 - var3 < (long)var2 || this.m_iPause != 0) {
  100.             try {
  101.                if (this.m_iPause == 0) {
  102.                   Thread.sleep((long)var2 - (var5 - var3));
  103.                } else {
  104.                   var9 = (double)((long)var2 - (var5 - var3) + (long)this.m_iPause);
  105.                   this.m_bInteruptPauseEvent = false;
  106.                   if (var9 > (double)0.0F) {
  107.                      int var12 = this.m_iCurrentFrame;
  108.                      this.m_iCurrentFrame = var11;
  109.  
  110.                      while(var9 > (double)0.0F && !this.m_bInteruptPauseEvent) {
  111.                         try {
  112.                            Thread.sleep((long)Math.min(var9, (double)250.0F));
  113.                         } catch (InterruptedException var18) {
  114.                         }
  115.  
  116.                         var9 -= Math.min(var9, (double)250.0F);
  117.                         if (!this.m_bCurrentActorsLoaded) {
  118.                            this.update();
  119.                         }
  120.                      }
  121.  
  122.                      this.m_iCurrentFrame = var12;
  123.                      this.m_iPause = 0;
  124.                      this.m_iPauseExit = 0;
  125.                   }
  126.                }
  127.             } catch (InterruptedException var20) {
  128.             }
  129.          }
  130.  
  131.          synchronized(this){}
  132.  
  133.          try {
  134.             var8 = false;
  135.             var7 = this.lbGetStatus();
  136.             if (var7 == 3) {
  137.                var3 = System.currentTimeMillis();
  138.                this.update();
  139.                this.processEvents(this.m_frames[this.m_iCurrentFrame - 1][this.m_frames[this.m_iCurrentFrame - 1].length - 1], 1);
  140.                var11 = this.m_iCurrentFrame++;
  141.                if (this.m_iCurrentFrame > this.m_iEndFrame) {
  142.                   this.m_iCurrentFrame = this.m_iStartFrame;
  143.                   if (!this.m_bDoLoop) {
  144.                      this.m_iCurrentFrame = this.m_iFinalFrame;
  145.                      this.update();
  146.                      this.setStatus(4);
  147.                      var8 = true;
  148.                   }
  149.                }
  150.             } else {
  151.                if (var7 == 5) {
  152.                   break;
  153.                }
  154.  
  155.                this.update();
  156.                var8 = true;
  157.             }
  158.          } catch (Throwable var21) {
  159.             throw var21;
  160.          }
  161.  
  162.          if (var8) {
  163.             try {
  164.                Thread.sleep(250L);
  165.             } catch (InterruptedException var19) {
  166.             }
  167.          }
  168.       }
  169.  
  170.       if (this.m_graphApp != null) {
  171.          this.m_graphApp.dispose();
  172.          this.m_graphApp = null;
  173.       }
  174.  
  175.    }
  176.  
  177.    public synchronized void lbStopAnim() {
  178.       this.lbGotoFrame(this.m_iFinalFrame);
  179.       this.update();
  180.       this.setStatus(5);
  181.    }
  182.  
  183.    protected synchronized boolean initAnim() {
  184.       this.m_iStatus = 0;
  185.       this.m_iMajorFileVersion = 0;
  186.       this.m_iMinorFileVersion = 0;
  187.       this.m_iCurrentFrame = 1;
  188.       this.m_iPause = 0;
  189.       this.m_iPauseExit = 0;
  190.       this.m_bInteruptPauseEvent = false;
  191.       this.m_iFrameCount = 0;
  192.       this.m_iFramesPerSecond = 12;
  193.       this.m_bCurrentActorsLoaded = false;
  194.       this.m_frames = null;
  195.       this.m_actors = null;
  196.       this.m_regPoints = null;
  197.       this.m_arstrHyperLinks = null;
  198.       this.m_arAudioClips = null;
  199.       this.m_imageBackground = null;
  200.       this.m_tracker = null;
  201.       this.m_strDefaultHyperLink = null;
  202.       this.m_strDefaultTarget = null;
  203.       return this.m_imageBuffer != null && this.m_graphBuffer != null;
  204.    }
  205.  
  206.    public synchronized boolean lbLoadAnim(String var1, String var2, boolean var3) throws IOException {
  207.       byte[] var4 = new byte[9];
  208.       int var7 = 0;
  209.       int var8 = 0;
  210.       int var9 = 0;
  211.       int var10 = -1;
  212.       if (!this.initAnim()) {
  213.          System.out.println("Animation could not be initialized.");
  214.          return false;
  215.       } else {
  216.          this.setStatus(1);
  217.          this.update();
  218.          if (var1 != null && var2.length() > 0) {
  219.             if (!var1.endsWith("/") && !var1.endsWith("\\")) {
  220.                var1 = var1 + "/";
  221.             }
  222.          } else {
  223.             var1 = "./";
  224.          }
  225.  
  226.          if (var2 != null && var2.length() > 0) {
  227.             DataInputStream var11;
  228.             try {
  229.                var11 = new DataInputStream((new URL(this.m_theApp.getDocumentBase(), var1 + var2)).openStream());
  230.             } catch (Exception var22) {
  231.                System.out.println("Error opening " + var1 + var2 + " -  " + ((Throwable)var22).getMessage());
  232.                return false;
  233.             }
  234.  
  235.             int var5 = var11.readInt();
  236.             var4[0] = var11.readByte();
  237.             var4[1] = var11.readByte();
  238.             var4[2] = var11.readByte();
  239.             var4[3] = var11.readByte();
  240.             var4[4] = var11.readByte();
  241.             var4[5] = var11.readByte();
  242.             var4[6] = var11.readByte();
  243.             var4[7] = var11.readByte();
  244.             var4[8] = var11.readByte();
  245.             this.m_iMajorFileVersion = var11.readInt();
  246.             this.m_iMinorFileVersion = var11.readInt();
  247.             this.m_iFrameCount = var11.readInt();
  248.             var7 = var11.readInt();
  249.             var8 = var11.readInt();
  250.             var9 = var11.readInt();
  251.             var10 = var11.readInt();
  252.             this.m_iFramesPerSecond = var11.readInt();
  253.             if (this.m_iMajorFileVersion <= 1 && (this.m_iMajorFileVersion != 1 || this.m_iMinorFileVersion <= 2)) {
  254.                int var6 = var11.readInt();
  255.                if (var6 != -1) {
  256.                   throw new IOException("Missing header terminator.");
  257.                } else {
  258.                   boolean var34 = false;
  259.                   boolean var13 = false;
  260.                   if (var7 > 0) {
  261.                      this.m_actors = new Image[var7][];
  262.                      this.m_regPoints = new Point[var7][];
  263.  
  264.                      try {
  265.                         for(int var35 = 0; var35 < var7; ++var35) {
  266.                            int var15 = var11.readInt();
  267.                            this.m_actors[var35] = new Image[var15];
  268.                            this.m_regPoints[var35] = new Point[var15];
  269.  
  270.                            for(int var14 = 0; var14 < var15; ++var14) {
  271.                               this.m_regPoints[var35][var14] = new Point(0, 0);
  272.                               this.m_regPoints[var35][var14].x = var11.readShort();
  273.                               this.m_regPoints[var35][var14].y = var11.readShort();
  274.                            }
  275.                         }
  276.                      } catch (IOException var26) {
  277.                         throw new IOException("Error reading actor resource info.");
  278.                      }
  279.                   }
  280.  
  281.                   var6 = var11.readInt();
  282.                   if (var6 != -1) {
  283.                      throw new IOException("Missing actor resource terminator.");
  284.                   } else {
  285.                      this.m_frames = new FrameElement[this.m_iFrameCount][];
  286.  
  287.                      try {
  288.                         for(int var36 = 0; var36 < this.m_iFrameCount; ++var36) {
  289.                            int var16 = var11.readInt();
  290.                            this.m_frames[var36] = new FrameElement[var16];
  291.  
  292.                            for(int var39 = 0; var39 < var16; ++var39) {
  293.                               this.m_frames[var36][var39] = new FrameElement();
  294.                               this.m_frames[var36][var39].iChannel = var11.readInt();
  295.                               this.m_frames[var36][var39].iTrigger = var11.readInt();
  296.                               this.m_frames[var36][var39].iExit = var11.readInt();
  297.                               this.m_frames[var36][var39].iSound = var11.readInt();
  298.                               this.m_frames[var36][var39].iHyperLinkURL = var11.readInt();
  299.                               this.m_frames[var36][var39].iPause = var11.readInt();
  300.                               this.m_frames[var36][var39].iFPS = var11.readInt();
  301.                               this.m_frames[var36][var39].iActor = var11.readInt();
  302.                               this.m_frames[var36][var39].iCel = var11.readInt();
  303.                               this.m_frames[var36][var39].left = var11.readShort();
  304.                               this.m_frames[var36][var39].top = var11.readShort();
  305.                               this.m_frames[var36][var39].right = var11.readShort();
  306.                               this.m_frames[var36][var39].bottom = var11.readShort();
  307.                            }
  308.                         }
  309.                      } catch (IOException var25) {
  310.                         throw new IOException("Error reading frame element data.");
  311.                      }
  312.  
  313.                      var6 = var11.readInt();
  314.                      if (var6 != -1) {
  315.                         throw new IOException("Missing frame element data terminator.");
  316.                      } else {
  317.                         try {
  318.                            if (var9 > 0) {
  319.                               this.m_arstrHyperLinks = new String[var9];
  320.  
  321.                               for(int var37 = 0; var37 < var9; ++var37) {
  322.                                  this.m_arstrHyperLinks[var37] = new String(var11.readLine());
  323.                               }
  324.                            }
  325.  
  326.                            if (var10 != -1) {
  327.                               this.m_strDefaultHyperLink = this.m_arstrHyperLinks[var10];
  328.                            }
  329.                         } catch (IOException var24) {
  330.                            throw new IOException("Error reading hyperlink resources.");
  331.                         }
  332.  
  333.                         var6 = var11.readInt();
  334.                         if (var6 != -1) {
  335.                            throw new IOException("Missing hyperlink resource terminator.");
  336.                         } else {
  337.                            try {
  338.                               ((FilterInputStream)var11).close();
  339.                            } catch (IOException var21) {
  340.                               throw new IOException("Error closing.");
  341.                            }
  342.  
  343.                            this.m_tracker = new MediaTracker(this.m_theApp);
  344.                            this.m_imageBackground = this.m_theApp.getImage(new URL(this.m_theApp.getDocumentBase(), var1 + "__back.gif"));
  345.                            this.m_tracker.addImage(this.m_imageBackground, 0);
  346.                            this.m_tracker.checkID(0, true);
  347.  
  348.                            for(int var41 = 0; this.m_actors != null && var41 < this.m_actors.length; ++var41) {
  349.                               try {
  350.                                  for(int var40 = 0; var40 < this.m_actors[var41].length; ++var40) {
  351.                                     if (this.m_actors[var41].length > var40) {
  352.                                        char[] var17 = "aa0000".toCharArray();
  353.                                        var17[0] = (char)(var17[0] + var41 / 26);
  354.                                        var17[1] = (char)(var17[1] + var41 % 26);
  355.                                        var17[2] = (char)(var17[2] + (var40 + 1) / 1000);
  356.                                        var17[3] = (char)(var17[3] + (var40 + 1) % 1000 / 100);
  357.                                        var17[4] = (char)(var17[4] + (var40 + 1) % 1000 % 100 / 10);
  358.                                        var17[5] = (char)(var17[5] + (var40 + 1) % 1000 % 100 % 10);
  359.                                        new String();
  360.                                        String var18 = "__" + var17[0] + var17[1] + var17[2] + var17[3] + var17[4] + var17[5];
  361.                                        this.m_actors[var41][var40] = this.m_theApp.getImage(new URL(this.m_theApp.getDocumentBase(), var1 + var18 + ".gif"));
  362.                                        if (!var3) {
  363.                                           this.m_tracker.addImage(this.m_actors[var41][var40], 0);
  364.                                           this.m_tracker.checkID(0, true);
  365.                                        } else {
  366.                                           this.m_tracker.addImage(this.m_actors[var41][var40], var40 * this.m_actors.length + var41);
  367.                                           this.m_tracker.checkID(var40 * this.m_actors.length + var41, true);
  368.                                        }
  369.                                     }
  370.                                  }
  371.                               } catch (Exception var23) {
  372.                               }
  373.                            }
  374.  
  375.                            this.m_arAudioClips = new AudioClip[var8];
  376.  
  377.                            for(int var38 = 0; var38 < var8; ++var38) {
  378.                               char[] var42 = "0000".toCharArray();
  379.                               var42[0] = (char)(var42[0] + var38 / 1000);
  380.                               var42[1] = (char)(var42[1] + var38 % 1000 / 100);
  381.                               var42[2] = (char)(var42[2] + var38 % 1000 % 100 / 10);
  382.                               var42[3] = (char)(var42[3] + var38 % 1000 % 100 % 10);
  383.                               new String();
  384.                               String var43 = "__sd" + var42[0] + var42[1] + var42[2] + var42[3];
  385.  
  386.                               try {
  387.                                  this.m_arAudioClips[var38] = this.m_theApp.getAudioClip(new URL(this.m_theApp.getDocumentBase(), var1 + var43 + ".au"));
  388.                                  if (this.m_arAudioClips[var38] == null) {
  389.                                     throw new Exception();
  390.                                  }
  391.                               } catch (Exception var20) {
  392.                                  System.out.println("Error loading sound: " + var1 + var43 + ".au");
  393.                               }
  394.                            }
  395.  
  396.                            try {
  397.                               this.m_theApp.showStatus("Astound WebMotion player loading actors...");
  398.                               this.m_tracker.waitForID(0);
  399.                            } catch (Exception var19) {
  400.                            }
  401.  
  402.                            this.m_iCurrentFrame = this.m_iStartFrame = 1;
  403.                            this.m_iEndFrame = this.m_iFinalFrame = this.m_iFrameCount;
  404.                            this.m_bDoLoop = true;
  405.                            this.setStatus(2);
  406.                            this.m_theApp.showStatus("");
  407.                            return true;
  408.                         }
  409.                      }
  410.                   }
  411.                }
  412.             } else {
  413.                String var12 = "Astound WebMotion Player version " + 1 + "." + 2 + " cannot playback animation version " + this.m_iMajorFileVersion + "." + this.m_iMinorFileVersion;
  414.                this.m_theApp.showStatus(var12);
  415.                throw new IOException(var12);
  416.             }
  417.          } else {
  418.             System.out.println("LoadAnim() called with no filename.");
  419.             return false;
  420.          }
  421.       }
  422.    }
  423.  
  424.    public synchronized boolean lbPlayAnim() {
  425.       boolean var1 = false;
  426.       switch (this.lbGetStatus()) {
  427.          case 0:
  428.          case 1:
  429.          case 5:
  430.             var1 = false;
  431.             break;
  432.          case 2:
  433.             this.m_iCurrentFrame = this.m_iStartFrame;
  434.          case 3:
  435.          case 4:
  436.             var1 = true;
  437.       }
  438.  
  439.       if (var1) {
  440.          this.setStatus(3);
  441.       }
  442.  
  443.       return var1;
  444.    }
  445.  
  446.    public synchronized void lbPauseAnim(int var1, boolean var2) {
  447.       if (this.lbGetStatus() == 3 && var1 >= 1) {
  448.          this.m_iPause = var1 * 1000;
  449.          this.m_iPauseExit = var2 ? 5 : 0;
  450.       }
  451.  
  452.    }
  453.  
  454.    public synchronized void lbSuspendAnim() {
  455.       if (this.lbGetStatus() == 3) {
  456.          this.setStatus(4);
  457.       }
  458.  
  459.    }
  460.  
  461.    public synchronized boolean lbGotoFrame(int var1) {
  462.       boolean var2 = false;
  463.       if (this.lbIsAnimLoaded() && var1 >= 1 && var1 <= this.m_iFrameCount) {
  464.          this.m_iCurrentFrame = var1;
  465.          var2 = true;
  466.       }
  467.  
  468.       return var2;
  469.    }
  470.  
  471.    public final int lbGetCurrentFrame() {
  472.       int var1 = 0;
  473.       if (this.lbIsAnimLoaded()) {
  474.          var1 = this.m_iCurrentFrame;
  475.       }
  476.  
  477.       return var1;
  478.    }
  479.  
  480.    public final int lbGetFrameCount() {
  481.       int var1 = 0;
  482.       if (this.lbIsAnimLoaded()) {
  483.          var1 = this.m_iFrameCount;
  484.       }
  485.  
  486.       return var1;
  487.    }
  488.  
  489.    public synchronized boolean lbSetStartFrame(int var1) {
  490.       boolean var2 = false;
  491.       if (this.lbIsAnimLoaded() && var1 <= this.m_iEndFrame) {
  492.          this.m_iStartFrame = Math.max(Math.min(var1, this.m_iFrameCount), 1);
  493.          var2 = true;
  494.       }
  495.  
  496.       return var2;
  497.    }
  498.  
  499.    public synchronized boolean lbSetEndFrame(int var1) {
  500.       boolean var2 = false;
  501.       if (this.lbIsAnimLoaded() && var1 >= this.m_iStartFrame) {
  502.          this.m_iEndFrame = Math.max(Math.min(var1, this.m_iFrameCount), 1);
  503.          var2 = true;
  504.       }
  505.  
  506.       return var2;
  507.    }
  508.  
  509.    public synchronized boolean lbSetFinalFrame(int var1) {
  510.       boolean var2 = false;
  511.       if (this.lbIsAnimLoaded() && var1 >= 1 && var1 <= this.m_iFrameCount) {
  512.          this.m_iFinalFrame = var1;
  513.          var2 = true;
  514.       }
  515.  
  516.       return var2;
  517.    }
  518.  
  519.    public final synchronized void lbSetDoLoop(boolean var1) {
  520.       if (this.lbIsAnimLoaded()) {
  521.          this.m_bDoLoop = var1;
  522.       }
  523.  
  524.    }
  525.  
  526.    public final int lbGetSpeed() {
  527.       int var1 = 0;
  528.       if (this.lbIsAnimLoaded()) {
  529.          var1 = this.m_iFramesPerSecond;
  530.       }
  531.  
  532.       return var1;
  533.    }
  534.  
  535.    public synchronized boolean lbSetSpeed(int var1) {
  536.       boolean var2 = false;
  537.       if (this.lbIsAnimLoaded() && var1 >= 0) {
  538.          this.m_iFramesPerSecond = var1;
  539.          var2 = true;
  540.       }
  541.  
  542.       return var2;
  543.    }
  544.  
  545.    public synchronized void lbSetHyperLink(String var1) {
  546.       if (this.lbIsAnimLoaded()) {
  547.          this.m_strDefaultHyperLink = var1;
  548.       }
  549.  
  550.    }
  551.  
  552.    public synchronized void lbSetHyperLinkTarget(String var1) {
  553.       if (this.lbIsAnimLoaded()) {
  554.          this.m_strDefaultTarget = var1;
  555.       }
  556.  
  557.    }
  558.  
  559.    protected synchronized void drawFrame(Graphics var1, int var2) {
  560.       if (this.m_imageBackground != null) {
  561.          var1.drawImage(this.m_imageBackground, 0, 0, (ImageObserver)null);
  562.       }
  563.  
  564.       if (var2 < 0 || var2 > this.m_iFrameCount - 1) {
  565.          System.out.println("WARNING:  DrawFrame frame number out of bounds - " + var2);
  566.          if (var2 < 0) {
  567.             var2 = 0;
  568.          }
  569.  
  570.          if (var2 > this.m_iFrameCount - 1) {
  571.             var2 = this.m_iFrameCount - 1;
  572.          }
  573.       }
  574.  
  575.       int var5 = this.m_frames[var2].length;
  576.       this.m_bCurrentActorsLoaded = true;
  577.  
  578.       for(int var4 = 0; var4 < var5 - 1; ++var4) {
  579.          int var8 = 0;
  580.          int var7 = 0;
  581.          Image var3 = null;
  582.          FrameElement var6 = this.m_frames[var2][var4];
  583.          if (this.m_tracker.checkID(var6.iCel * this.m_actors.length + var6.iActor, true)) {
  584.             var3 = this.m_actors[var6.iActor][var6.iCel];
  585.          } else {
  586.             this.m_bCurrentActorsLoaded = false;
  587.  
  588.             for(int var9 = var6.iCel; var9 >= 0; --var9) {
  589.                if (this.m_tracker.checkID(var9 * this.m_actors.length + var6.iActor, true)) {
  590.                   var3 = this.m_actors[var6.iActor][var9];
  591.                   var7 = this.m_regPoints[var6.iActor][var9].x - this.m_regPoints[var6.iActor][var6.iCel].x;
  592.                   var8 = this.m_regPoints[var6.iActor][var9].y - this.m_regPoints[var6.iActor][var6.iCel].y;
  593.                   break;
  594.                }
  595.             }
  596.          }
  597.  
  598.          if (var3 != null) {
  599.             var1.drawImage(var3, var6.left - var7, var6.top - var8, (ImageObserver)null);
  600.          }
  601.       }
  602.  
  603.    }
  604.  
  605.    protected synchronized boolean processEvents(FrameElement var1, int var2) {
  606.       if (var1 != null && var2 > 0 && (var1.iTrigger & var2) != 0) {
  607.          boolean var3 = false;
  608.          if (var1.iFPS != -1) {
  609.             this.m_iFramesPerSecond = var1.iFPS;
  610.             var3 = true;
  611.          }
  612.  
  613.          if (var1.iPause >= 0) {
  614.             this.m_iPause = var1.iPause == 0 ? 17280000 : var1.iPause * 100;
  615.             this.m_iPauseExit = var1.iExit;
  616.             var3 = true;
  617.          } else if (var1.iSound != -1 && this.m_arAudioClips[var1.iSound] != null) {
  618.             this.m_arAudioClips[var1.iSound].play();
  619.             var3 = true;
  620.          } else if (var1.iHyperLinkURL != -1) {
  621.             String var4 = this.m_arstrHyperLinks[var1.iHyperLinkURL];
  622.  
  623.             try {
  624.                if (var4 != null && var4.startsWith("FRAME:")) {
  625.                   int var8 = Integer.parseInt(var4.substring(6));
  626.                   this.lbGotoFrame(var8);
  627.                   var3 = true;
  628.                } else if (var4 != null && var4.length() > 0) {
  629.                   URL var5 = new URL(var4);
  630.                   if (this.m_strDefaultTarget != null) {
  631.                      this.m_theApp.getAppletContext().showDocument(var5, this.m_strDefaultTarget);
  632.                   } else {
  633.                      this.m_theApp.getAppletContext().showDocument(var5);
  634.                   }
  635.  
  636.                   var3 = true;
  637.                }
  638.             } catch (MalformedURLException var6) {
  639.                System.out.println("Invalid URL - " + var4);
  640.             } catch (NumberFormatException var7) {
  641.                System.out.println("Invalid JUMP FRAME# - " + var4);
  642.             }
  643.          }
  644.  
  645.          return var3;
  646.       } else {
  647.          return false;
  648.       }
  649.    }
  650.  
  651.    protected String getURLFromPoint(int var1, int var2, int var3) {
  652.       String var4 = null;
  653.       FrameElement var5 = this.getFrameElementFromPoint(var1, var2, var3);
  654.       if (var5 != null && var5.iHyperLinkURL != -1) {
  655.          var4 = this.m_arstrHyperLinks[var5.iHyperLinkURL];
  656.       }
  657.  
  658.       if (var4.length() < 1) {
  659.          var4 = null;
  660.       }
  661.  
  662.       return var4;
  663.    }
  664.  
  665.    protected String getURLFromFrameElement(FrameElement var1) {
  666.       String var2 = null;
  667.       if (var1 != null && var1.iHyperLinkURL != -1) {
  668.          var2 = this.m_arstrHyperLinks[var1.iHyperLinkURL];
  669.       }
  670.  
  671.       if (var2 != null && var2.length() < 1) {
  672.          var2 = null;
  673.       }
  674.  
  675.       return var2;
  676.    }
  677.  
  678.    protected FrameElement getFrameElementFromPoint(int var1, int var2, int var3) {
  679.       Rectangle var4 = new Rectangle();
  680.       FrameElement var5 = null;
  681.  
  682.       for(int var6 = this.m_frames[var1].length - 2; var6 >= 0; --var6) {
  683.          var4.x = this.m_frames[var1][var6].left;
  684.          var4.y = this.m_frames[var1][var6].top;
  685.          var4.width = this.m_frames[var1][var6].right - var4.x;
  686.          var4.height = this.m_frames[var1][var6].bottom - var4.y;
  687.          if (var4.inside(var2, var3)) {
  688.             var5 = this.m_frames[var1][var6];
  689.             break;
  690.          }
  691.       }
  692.  
  693.       return var5;
  694.    }
  695.  
  696.    public void paint(Graphics var1) {
  697.       if (var1 != null && this.m_graphBuffer != null) {
  698.          switch (this.lbGetStatus()) {
  699.             case 0:
  700.             case 1:
  701.                this.m_graphBuffer.setColor(Color.white);
  702.                this.m_graphBuffer.fillRect(0, 0, this.m_theApp.size().width, this.m_theApp.size().height);
  703.                this.m_graphBuffer.setColor(Color.black);
  704.                this.m_graphBuffer.setFont(new Font("Dialog", 0, 8));
  705.                String var2 = "Astound WebMotion";
  706.                String var3;
  707.                if (this.lbGetStatus() == 1) {
  708.                   var3 = "animation loading...";
  709.                } else {
  710.                   var3 = "animation (empty)";
  711.                }
  712.  
  713.                int var4 = var1.getFontMetrics().getHeight();
  714.                int var5 = var1.getFontMetrics().getAscent();
  715.                int var6 = var1.getFontMetrics().getLeading();
  716.                int var7 = (this.m_theApp.size().width - var1.getFontMetrics().stringWidth(var2)) / 2;
  717.                int var8 = (this.m_theApp.size().width - var1.getFontMetrics().stringWidth(var3)) / 2;
  718.                int var9 = (this.m_theApp.size().height - var4 * 2) / 2;
  719.                this.m_graphBuffer.drawString(var2, var7, var9 + var5 + var6);
  720.                this.m_graphBuffer.drawString(var3, var8, var4 + var9 + var5 + var6);
  721.                break;
  722.             case 2:
  723.             case 3:
  724.             case 4:
  725.                this.m_graphBuffer.setColor(Color.white);
  726.                this.m_graphBuffer.fillRect(0, 0, this.m_theApp.size().width, this.m_theApp.size().height);
  727.                this.drawFrame(this.m_graphBuffer, this.m_iCurrentFrame - 1);
  728.          }
  729.  
  730.          var1.drawImage(this.m_imageBuffer, 0, 0, (ImageObserver)null);
  731.       }
  732.  
  733.    }
  734.  
  735.    public void update() {
  736.       this.paint(this.m_graphApp);
  737.    }
  738.  
  739.    protected final void setStatus(int var1) {
  740.       if (var1 == 0 || var1 == 1 || var1 == 2 || var1 == 3 || var1 == 5 || var1 == 4) {
  741.          this.m_iStatus = var1;
  742.       }
  743.  
  744.       this.resumeEx();
  745.    }
  746.  
  747.    public final int lbGetStatus() {
  748.       int var1 = this.m_iStatus;
  749.       return var1;
  750.    }
  751.  
  752.    public final boolean lbIsAnimLoaded() {
  753.       int var1 = this.lbGetStatus();
  754.       boolean var2 = false;
  755.       if (var1 == 2 || var1 == 3 || var1 == 4) {
  756.          var2 = true;
  757.       }
  758.  
  759.       return var2;
  760.    }
  761.  
  762.    protected void suspendEx() {
  763.       if (!this.m_bThreadSuspended) {
  764.          this.m_bThreadSuspended = true;
  765.          ((Thread)this).suspend();
  766.       }
  767.  
  768.    }
  769.  
  770.    protected void resumeEx() {
  771.       if (this.m_bThreadSuspended) {
  772.          ((Thread)this).resume();
  773.          this.m_bThreadSuspended = false;
  774.       }
  775.  
  776.    }
  777.  
  778.    public synchronized boolean mouseDown(Event var1, int var2, int var3) {
  779.       if (this.lbGetStatus() != 3) {
  780.          return false;
  781.       } else {
  782.          long var4 = this.m_iWhenLastClick;
  783.          this.m_iWhenLastClick = var1.when;
  784.          boolean var6 = var1.clickCount > 1 && var1.when - var4 < 1000L;
  785.          int var7 = 0;
  786.          int var8 = 0;
  787.          if ((var1.modifiers & 4) != 0) {
  788.             var7 = var6 ? 16 : 8;
  789.             var8 = var6 ? 8 : 4;
  790.          } else {
  791.             var7 = var6 ? 4 : 2;
  792.             var8 = var6 ? 2 : 1;
  793.          }
  794.  
  795.          if (this.m_iPause > 0 && (this.m_iPauseExit & var8) != 0) {
  796.             this.m_bInteruptPauseEvent = true;
  797.          }
  798.  
  799.          if (this.m_iPause <= 0 || this.m_bInteruptPauseEvent) {
  800.             FrameElement var9 = this.getFrameElementFromPoint(this.m_iCurrentFrame - 1, var2, var3);
  801.             if (var9 == null || !this.processEvents(var9, var7) && !this.isInteractive(var9)) {
  802.                try {
  803.                   if (this.m_strDefaultHyperLink != null && this.m_strDefaultHyperLink.length() > 0) {
  804.                      if (this.m_strDefaultTarget != null && this.m_strDefaultTarget.length() > 0) {
  805.                         this.m_theApp.getAppletContext().showDocument(new URL(this.m_strDefaultHyperLink), this.m_strDefaultTarget);
  806.                      } else {
  807.                         this.m_theApp.getAppletContext().showDocument(new URL(this.m_strDefaultHyperLink));
  808.                      }
  809.                   }
  810.                } catch (MalformedURLException var10) {
  811.                   System.out.println("Invalid Default HyperLink: " + this.m_strDefaultHyperLink);
  812.                }
  813.             }
  814.          }
  815.  
  816.          return true;
  817.       }
  818.    }
  819.  
  820.    public synchronized boolean mouseMove(Event var1, int var2, int var3) {
  821.       if (this.lbGetStatus() != 3) {
  822.          return false;
  823.       } else {
  824.          String var4 = null;
  825.          if (this.m_iPause <= 0 || this.m_bInteruptPauseEvent || (this.m_iPauseExit & 5) != 0) {
  826.             FrameElement var5 = this.getFrameElementFromPoint(this.m_iCurrentFrame - 1, var2, var3);
  827.             if (var5 != null) {
  828.                var4 = this.getURLFromFrameElement(var5);
  829.                if (var4 != null && var4.startsWith("FRAME:") || var4 == null && this.isInteractive(var5)) {
  830.                   var4 = "Click here!";
  831.                }
  832.             }
  833.  
  834.             if (var4 == null && this.m_strDefaultHyperLink != null) {
  835.                var4 = this.m_strDefaultHyperLink;
  836.             } else if (var4 == null) {
  837.                var4 = "";
  838.             }
  839.          }
  840.  
  841.          this.setCursor(var4 != null && var4.length() > 0 ? 12 : 0);
  842.          this.m_theApp.showStatus(var4);
  843.          return true;
  844.       }
  845.    }
  846.  
  847.    protected boolean isInteractive(FrameElement var1) {
  848.       boolean var2 = false;
  849.       if (var1 != null) {
  850.          String var3 = this.getURLFromFrameElement(var1);
  851.          if (var3 != null) {
  852.             var2 = true;
  853.          } else if ((var1.iPause > -1 || var1.iFPS > -1 || var1.iSound > -1) && (var1.iTrigger & 30) != 0) {
  854.             var2 = true;
  855.          }
  856.       }
  857.  
  858.       return var2;
  859.    }
  860.  
  861.    protected Frame getTopFrame() {
  862.       Container var1 = this.m_theApp.getParent();
  863.  
  864.       Frame var2;
  865.       for(var2 = null; var1 != null; var1 = ((Component)var1).getParent()) {
  866.          if (var1 instanceof Frame) {
  867.             var2 = (Frame)var1;
  868.             break;
  869.          }
  870.       }
  871.  
  872.       return var2;
  873.    }
  874.  
  875.    protected int setCursor(int var1) {
  876.       int var2 = 0;
  877.       if (this.m_frameTop == null) {
  878.          this.m_frameTop = this.getTopFrame();
  879.       }
  880.  
  881.       if (this.m_frameTop != null) {
  882.          var2 = this.m_frameTop.getCursorType();
  883.          this.m_frameTop.setCursor(var1);
  884.          this.m_theApp.getToolkit().sync();
  885.       }
  886.  
  887.       return var2;
  888.    }
  889.  
  890.    public final int lbGetPlayerVersionMajor() {
  891.       return 1;
  892.    }
  893.  
  894.    public final int lbGetPlayerVersionMinor() {
  895.       return 2;
  896.    }
  897.  
  898.    public final int lbGetFileVersionMajor() {
  899.       int var1 = this.m_iMajorFileVersion;
  900.       if (!this.lbIsAnimLoaded()) {
  901.          var1 = 0;
  902.       }
  903.  
  904.       return var1;
  905.    }
  906.  
  907.    public final int lbGetFileVersionMinor() {
  908.       int var1 = this.m_iMinorFileVersion;
  909.       if (!this.lbIsAnimLoaded()) {
  910.          var1 = 0;
  911.       }
  912.  
  913.       return var1;
  914.    }
  915. }
  916.